package com.sunwoda.springbootredis.redislock;

import com.sunwoda.springbootredis.dao.UserDao;
import com.sunwoda.springbootredis.entity.User;
import com.sunwoda.springbootredis.service.UserService;
import com.sunwoda.springbootredis.util.RedisBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * @program: springbootredis
 * @description: lock2
 * @author: SGR
 * @create: 2021-09-14 14:12
 **/
@Component
public class LockVersion2 {

//    超时设置存在的问题，如果业务没有在超时时间内完成业务就会报错
    public String lock(){
        RedisTemplate redis = RedisBean.redis;
        redis.setKeySerializer(new StringRedisSerializer());
//        设置过期时间，避免死锁
        Boolean aBoolean = redis.opsForValue().setIfAbsent("lock", "lock", 5, TimeUnit.MILLISECONDS);
        if (!aBoolean){
            return "error";
        }
        try {
            redis.opsForValue().set("stock",100);
            Object o = redis.opsForValue().get("stock");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
           redis.delete("lock");
        }
        return "success";
    }
}
